package com.smart.community.region.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import com.fasterxml.jackson.annotation.JsonIgnore;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 房户实体类
 * 
 * @author Wu.Liang
 * @since 2024-12-21
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sc_household")
public class Household implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 房户ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 房户编码
     */
    @TableField("household_code")
    private String householdCode;

    /**
     * 所属社区ID
     */
    @TableField("community_id")
    private Long communityId;

    /**
     * 所属楼栋ID
     */
    @TableField("building_id")
    private Long buildingId;

    /**
     * 所属单元ID
     */
    @TableField("unit_id")
    private Long unitId;

    /**
     * 楼层号
     */
    @TableField("floor_number")
    private Integer floorNumber;

    /**
     * 房间号
     */
    @TableField("room_number")
    private String roomNumber;

    /**
     * 房间类型：1-一室，2-两室，3-三室，4-四室及以上
     */
    @TableField("room_type")
    private Integer roomType;

    /**
     * 户型配置ID
     */
    @TableField("house_type_id")
    private Long houseTypeId;

    /**
     * 户型配置名称
     */
    @TableField("house_type_name")
    private String houseTypeName;

    /**
     * 面积（平方米）
     */
    @TableField("area")
    private BigDecimal area;

    /**
     * 使用面积（平方米）
     */
    @TableField("usable_area")
    private BigDecimal usableArea;

    /**
     * 朝向
     */
    @TableField("orientation")
    private String orientation;

    /**
     * 产权类型：1-自有，2-租赁，3-其他
     */
    @TableField("property_type")
    private Integer propertyType;

    /**
     * 房产证号
     */
    @TableField("property_certificate")
    private String propertyCertificate;

    /**
     * 购买日期
     */
    @TableField("purchase_date")
    private String purchaseDate;

    /**
     * 物业费单价(元/平方米)
     */
    @TableField("property_fee_rate")
    private BigDecimal propertyFeeRate;

    /**
     * 状态：0-空置，1-已入住，2-装修中，3-出租
     */
    @TableField("status")
    private Integer status;

    /**
     * 排序字段
     */
    @TableField("sort_order")
    private Integer sortOrder;

    /**
     * 房户描述
     */
    @TableField("description")
    private String description;

    /**
     * 创建人
     */
    @TableField("create_by")
    private Long createBy;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 更新人
     */
    @TableField("update_by")
    private Long updateBy;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableField("deleted")
    @TableLogic
    private Integer deleted;

    /**
     * 版本号
     */
    @TableField("version")
    @Version
    private Integer version;

    // ==================== 关联信息字段（非数据库字段） ====================

    /**
     * 社区名称（非数据库字段）
     */
    @TableField(exist = false)
    private String communityName;

    /**
     * 社区编码（非数据库字段）
     */
    @TableField(exist = false)
    private String communityCode;

    /**
     * 楼栋名称（非数据库字段）
     */
    @TableField(exist = false)
    private String buildingName;

    /**
     * 楼栋编码（非数据库字段）
     */
    @TableField(exist = false)
    private String buildingCode;

    /**
     * 单元名称（非数据库字段）
     */
    @TableField(exist = false)
    private String unitName;

    /**
     * 单元编码（非数据库字段）
     */
    @TableField(exist = false)
    private String unitCode;

    // ==================== 业务方法 ====================

    /**
     * 获取状态文本
     */
    @JsonIgnore
    public String getStatusDesc() {
        if (status == null) {
            return "未知";
        }
        switch (status) {
            case 0:
                return "空置";
            case 1:
                return "已入住";
            case 2:
                return "装修中";
            case 3:
                return "出租";
            default:
                return "未知";
        }
    }

    /**
     * 获取房间类型文本
     */
    @JsonIgnore
    public String getRoomTypeText() {
        if (roomType == null) {
            return "未知";
        }
        switch (roomType) {
            case 1:
                return "一室";
            case 2:
                return "两室";
            case 3:
                return "三室";
            case 4:
                return "四室及以上";
            default:
                return "未知";
        }
    }

    /**
     * 获取产权类型文本
     */
    @JsonIgnore
    public String getPropertyTypeText() {
        if (propertyType == null) {
            return "未知";
        }
        switch (propertyType) {
            case 1:
                return "自有";
            case 2:
                return "租赁";
            case 3:
                return "其他";
            default:
                return "未知";
        }
    }

    /**
     * 获取完整房间号
     */
    @JsonIgnore
    public String getFullRoomNumber() {
        if (floorNumber == null || roomNumber == null) {
            return "";
        }
        return floorNumber + roomNumber;
    }
} 